package middleware

//
//import (
//	"encoding/base64"
//	"net/url"
//	"strings"
//	"time"
//
//	"zhiyun-tech.com/servers/apps/common/consts"
//
//	pb "zhiyun-tech.com/servers/apps/service/api/usercenter/v1"
//	"zhiyun-tech.com/servers/apps/service/client"
//	"zhiyun-tech.com/servers/apps/service/pkgss"
//	"zhiyun-tech.com/servers/apps/service/pkgss/svcconf"
//
//	"github.com/gin-gonic/gin"
//)
//
//// 登录看守  不要再使用了，请使用LoginRpcGuard替代
//func LoginGuard(db *sqlx.DB, redis *myredis.MyRedis) gin.HandlerFunc {
//	return func(c *gin.Context) {
//		//if common.IsJustTestEnv() {
//		//	for k, v := range c.Request.Header {
//		//		logger.Println("header:", k, v)
//		//	}
//		//}
//
//		token, userId := httputil.GetLoginCertificate(c)
//		production := httputil.GetProduction(c, false)
//		isZyApp := false
//		if production == consts.PRODUCTION_ZYCAMI ||
//			production == consts.PRODUCTION_ZYSTACAM ||
//			production == consts.PRODUCTION_ZYPLAY ||
//			production == consts.PRODUCTION_ZYVEGA {
//			isZyApp = true
//		}
//		if !isZyApp {
//			if userId <= 0 {
//				httputil.GinErrorWithMsgP(c, errcode.PARAMS_ERROR, "参数类型错误: X-ZY-USERID 头必须")
//				c.Abort()
//				return
//			}
//		}
//
//		if token == "" {
//			httputil.GinErrorWithMsgP(c, errcode.PARAMS_ERROR, "参数类型错误: X-ZY-TOKEN 头必须")
//			c.Abort()
//			return
//		}
//
//		user, err := common.GetTokenInfo(db, redis, token)
//		if err != nil {
//			httputil.GinErrorWithMsgP(c, errcode.TOKEN_EXPIRED, "token:"+token+" err:"+err.Error())
//			c.Abort()
//			return
//		}
//		if !isZyApp {
//			if userId != uint64(user.UserId) {
//				//用户id不一致了
//				httputil.GinErrorWithMsgP(c, errcode.TOKEN_EXPIRED, errcode.GetErrmsg(errcode.TOKEN_EXPIRED))
//				c.Abort()
//				return
//			}
//		}
//
//		c.Set("$user", user)
//
//		c.Next()
//	}
//}
//
//// 通过rpc来检测token
//func LoginRpcGuard(endpoint string) gin.HandlerFunc {
//	usercenterRpcClient := client.NewUserCenterGrpcClient(pkgss.NewDiscovery(svcconf.ServerConf{
//		Registry: svcconf.RegistryConf{
//			Endpoint: endpoint,
//		},
//	}))
//	return func(c *gin.Context) {
//		token, userId := httputil.GetLoginCertificate(c)
//		production := httputil.GetProduction(c, false)
//		if production == consts.PRODUCTION_ZYCAMI ||
//			production == consts.PRODUCTION_ZYSTACAM ||
//			production == consts.PRODUCTION_ZYPLAY ||
//			production == consts.PRODUCTION_ZYVEGA {
//
//		} else {
//			//zycami等要兼容以前的
//			if userId <= 0 {
//				httputil.GinErrorWithMsgP(c, errcode.PARAMS_ERROR, "参数类型错误: X-ZY-USERID 头必须")
//				c.Abort()
//				return
//			}
//		}
//
//		if token == "" {
//			httputil.GinErrorWithMsgP(c, errcode.PARAMS_ERROR, "参数类型错误: X-ZY-TOKEN 头必须")
//			c.Abort()
//			return
//		}
//		resp, err := usercenterRpcClient.CheckToken(c, &pb.CheckTokenReq{
//			UserId: int64(userId),
//			Token:  token,
//		})
//		if err != nil {
//			httputil.GinErrorWithMsgP(c, errcode.TOKEN_EXPIRED, "token:"+token+" rpc err:"+err.Error())
//			c.Abort()
//			return
//		}
//
//		var tt time.Time
//		if resp.TcreateAt != nil {
//			tt = resp.TcreateAt.AsTime()
//		}
//		c.Set("$user", &common.UserTokenInfo{
//			Token:     token,
//			UserId:    int(resp.UserId),
//			TCreateAt: tt,
//		})
//
//		c.Next()
//	}
//}
//
//// 设备在线看守
//func DeviceOnlineGuard(endpoint string) gin.HandlerFunc {
//	rpc := client.NewUserCenterGrpcClient(pkgss.NewDiscovery(svcconf.ServerConf{
//		Registry: svcconf.RegistryConf{
//			Endpoint: endpoint,
//		},
//	}))
//	return func(c *gin.Context) {
//		deviceId := httputil.GetDeviceID(c)
//		production := httputil.GetProduction(c, false)
//		_, userId := httputil.GetLoginCertificate(c)
//		//logger.Println("DeviceOnlineGuard:", deviceId, production, userId)
//		if deviceId != "" {
//			data, err := rpc.CheckOnline(c, &pb.CheckOnlineReq{DeviceId: deviceId, Production: production, UserId: int64(userId)})
//			if err != nil {
//				httputil.GinErrorWithMsgP(c, errcode.UNKNOW_ERROR, "check online err："+err.Error())
//				c.Abort()
//				return
//			}
//			// 数据存在才校验
//			if data.Id != 0 && data.IsActive == 0 {
//				httputil.GinErrorWithMsgP(c, errcode.DEVICE_OFFLINE, errcode.GetErrmsg(errcode.DEVICE_OFFLINE))
//				c.Abort()
//				return
//			}
//		}
//		c.Next()
//	}
//}
//
//// 内部调用
//func InnerInvokeGuard() gin.HandlerFunc {
//	return func(c *gin.Context) {
//		//sign := c.GetHeader("signature")
//		sign := c.Query("signature")
//		if sign == "" {
//			sign = c.PostForm("signature")
//			if sign != "" {
//				sign, _ = url.QueryUnescape(sign)
//			}
//		}
//		if sign == "" {
//			sign = c.GetHeader("signature")
//			if sign != "" {
//				sign, _ = url.QueryUnescape(sign)
//			}
//		}
//		if sign == "" {
//			httputil.GinErrorWithMsg(c, errcode.NO_PERMISSION, "无权访问，signature不允许空!")
//			c.Abort()
//			return
//		}
//
//		//sign, _ = url.QueryUnescape(sign)
//
//		if !signature.VerifyServiceSignature(sign, c) {
//			return
//		}
//
//		c.Next()
//	}
//}
//
//func BasicAuth(skip bool, user string, pass string) gin.HandlerFunc {
//	return func(c *gin.Context) {
//		if skip {
//			c.Next()
//			return
//		}
//		authstr := c.GetHeader("Authorization")
//		arr := strings.Split(authstr, " ")
//
//		hanldeAuth := func() {
//			c.Header("WWW-Authenticate", "Basic realm=\"Access to the staging site\", charset=\"UTF-8\"")
//			c.String(401, "401 Basic Unauthorized")
//			c.Abort()
//		}
//
//		if authstr == "" || len(arr) != 2 {
//			hanldeAuth()
//			return
//		}
//
//		bstr, err := base64.StdEncoding.DecodeString(arr[1])
//		if err != nil {
//			hanldeAuth()
//			return
//		}
//		arr = strings.Split(string(bstr), ":")
//		if len(arr) != 2 {
//			hanldeAuth()
//			return
//		}
//		u := arr[0]
//		p := arr[1]
//		if user != u || pass != p {
//			hanldeAuth()
//			return
//		}
//		c.Next()
//	}
//}
